package org.dev.hi.hiui.title

import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
import android.util.AttributeSet
import android.util.TypedValue
import org.dev.hi.hiui.R
import org.dev.hi.library.util.HiDisPlayUtils
import org.dev.hi.library.util.HiRes

/**
 * Author WenPing
 * CreateTime 2021/8/22.
 * Description:用于title属性解析
 */
internal object AttrsParse {

    /**
     * 先解析应用主题下的 hiNavigationStyle，如果没有解析到再解析本地声明的
     */
    fun parseAttrs(
        context: Context,
        attributeSet: AttributeSet? = null,
        defstyle: Int = 0
    ): Attrs {
        // 解析app应用主题下配置的hiNavigationStyle
        val value = TypedValue()
        context
            .theme
            .resolveAttribute(R.attr.hiNavigationStyle, value, true)
        // 没解析到则使用本地的
        val defstyleRes = if (value.resourceId != 0) value.resourceId
        else R.style.navigationStyle

        /**
        (@Nullable AttributeSet set // 构造方法中,
        @NonNull @StyleableRes int[] attrs // style文件中定义的属性集合,
        @AttrRes int defStyleAttr // 构造方法中传入的,
        @StyleRes int defStyleRes // 赋给自定义属性集合的值的集合
        )
         */
        val array = context.obtainStyledAttributes(
            attributeSet,
            R.styleable.HiNavigationBar,
            defstyle,
            defstyleRes
        )
        // 图标
        val navCon = array.getString(R.styleable.HiNavigationBar_nav_icon)
        val navIconColor = array.getColor(R.styleable.HiNavigationBar_nav_icon_color, Color.BLACK)
        val navIconSize = array.getDimensionPixelSize(
            R.styleable.HiNavigationBar_nav_icon_size, HiDisPlayUtils.sp2px(18f)
        )
        // 按钮
        val btnTextSize = array.getDimensionPixelSize(
            R.styleable.HiNavigationBar_text_btn_text_size, HiDisPlayUtils.sp2px(16f)
        )
        // getColorStateList
        val btnTextColor = array.getColorStateList(
            R.styleable.HiNavigationBar_text_btn_text_color
        )
        // 标题
        val navTitle = array.getString(R.styleable.HiNavigationBar_nav_title)
        val titleTextSize = array.getDimensionPixelSize(
            R.styleable.HiNavigationBar_title_text_size,
            HiDisPlayUtils.sp2px(17f)
        )
        val titleTextColor = array.getColor(
            R.styleable.HiNavigationBar_title_text_color,
            HiRes.getColor(R.color.hi_tabtop_normal_color)
        )
        // 副标题
        val navSubtitle = array.getString(R.styleable.HiNavigationBar_nav_subtitle)
        val subTitleSize = array.getDimensionPixelSize(
            R.styleable.HiNavigationBar_subTitle_text_size,
            HiDisPlayUtils.sp2px(14f)
        )
        val subTitleTextColor = array.getColor(
            R.styleable.HiNavigationBar_subTitle_text_color,
            HiRes.getColor(R.color.hi_tabtop_normal_color)
        )
        // 水平的padding
        val horPadding = array.getDimensionPixelSize(R.styleable.HiNavigationBar_hor_padding, 0)
        // 线条颜色
        val lineColor = array.getColor(
            R.styleable.HiNavigationBar_nav_line_color,
            Color.parseColor("#eeeeee")
        )

        val lineHeight = array.getDimensionPixelOffset(
            R.styleable.HiNavigationBar_nav_line_height,
            0
        )

        array.recycle()
        return Attrs(
            navCon,
            navIconColor,
            navIconSize.toFloat(),
            navTitle,
            navSubtitle,
            horPadding,
            btnTextSize.toFloat(),
            btnTextColor,
            titleTextSize.toFloat(),
            subTitleSize.toFloat(),
            titleTextColor,
            subTitleSize.toFloat(),
            subTitleTextColor,
            lineColor,
            lineHeight
        )
    }

    data class Attrs(
        val navIconStr: String?,// 导航栏左侧图标
        val navIconColor: Int,// back图标颜色
        val navIconSize: Float,// back大小
        val navTitle: String?,// 主标题
        val navSubtitle: String?,// 副标题
        val horPadding: Int,// 水平的padding值
        val btnTextSize: Float,// 按钮的字体大小
        val btnTextColor: ColorStateList?,// 按钮文字颜色
        val titleTextSize: Float,// 主标题文字大小
        val titleTextSizeWithSubTitle: Float,// 副标题存在的的时候主标题的文字大小
        val titleTextColor: Int,// 主标题颜色
        val subTitleSize: Float,// 副标题文字大小
        val subTitleTextColor: Int,// 副标题文字颜色
        val lineColor: Int,// 导航栏线条颜色
        val lineHeight: Int// 导航栏线条高度
    )

}